<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
	    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
		<title>Agents Mobiles</title>
	</head>
	<body>
		<h1 align="center">Projet Agents Mobiles - PARISY Anthony et VALDENER Marc</h1>
		<br/>
		<br/>
		<p>
			<h2>Choix d'impl&eacute;mentation :</h2>
			Dans ce projet, nous avons choisi d'utiliser uniquement la communication par agents mobiles, c'est &agrave; dire que quand un agent d&eacute;sire communiquer avec un autre, il migre simplement sur sa Machine et communique donc en local.<br/>
			Nous n'avons utilis&eacute; <b>aucune</b> API ou framework de communication (tel que RMI par exemple).<br/>
			Nous utilisons simplement des sockets afin de faire migrer des <i>"Agents mobiles"</i> d'une Machine &agrave; l'autre.<br/>
			Plus pr&eacute;cis&eacute;ment, nous avons d&eacute;velopp&eacute; un concept de <i>"Server"</i> hebergeant ces agents.<br/>
			La communication se fait ensuite gr&acirc;ce &agrave; un syst&egrave;me de <i>"bo&icirc;te aux lettres"</i> (sorte de queue des requ&ecirc;tes &agrave; traiter).<br/>
			Chaque agent en poss&egrave;de une.<br/>
			L'agent d&eacute;sirant communiquer avec un autre agent sur le server interroge celui ci pour pouvoir d&eacute;poser un <i>"Message"</i> dans la boite &agrave; lettres de l'agent destinataire.<br/>
			Ces messages qu'ils s'&eacute;changent sont lus de mani&egrave;re s&eacute;quentielle sur le principe <b>FIFO</b>.<br/>
			Nous avons ensuite distingu&eacute; deux types de messages : ceux attendant une r&eacute;ponse (<i>"RequestMessage"</i>) et ceux n'en attendant pas (<i>"Message"</i> classique).<br/>
			Dans le premier cas, nous avons impl&eacute;menter un syst&egrave;me de futures, permettant de ne pas bloquer l'appelant tant qu'il ne n&eacute;cessite pas d'acc&eacute;der &agrave; la ressource demand&eacute;.<br/>
			Dans le deuxi&egrave;me cas, nous envoyons simplement le message, que l'agent traitera ult&eacute;rieurement.<br/>
			<br/>
		</p>
		<p>
			<h2>Description des scripts de lancement :</h2>
			Nous avons d&eacute;fini trois types de scripts (s&eacute;par&eacute; par leurs cat&eacute;gories respectives).<br/>
			Chaque script lance le <i>Launcher</i> associ&eacute;, apr&egrave;s avoir export&eacute; le classpath correctement.<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Premi&egrave;re cat&eacute;gorie</u> : L'<b>Annuaire</b>, qui lance ici l'annuaire principal (<i>Pages Jaunes</i>)<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Deuxi&egrave;me cat&eacute;gorie</u> : Les <b>Magasins</b>. Nous avons d&eacute;fini trois magasins (avec leurs articles associ&eacute;s) : <i>Carrefour</i>, <i>Casino</i> et <i>ED</i>.<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Trois&egrave;me cat&eacute;gorie</u> : Les <b>Acheteurs</b>. La encore, trois acheteurs (avec leur liste de course associ&eacute;e) : <i>Riche</i>, <i>Normal</i> et <i>Pauvre</i>.<br/>
			<br/>
			<br/>
		</p>
		<p>	
			<h2>Remarques :</h2>
			Afin de lancer correctement l'annuaire principal, vous devez &eacute;diter manuellement la classe <i>Directory</i> afin d'y sp&eacute;cifier le nom et le port de la machine h&ocirc;te.<br/>
			Cela est du au fait que cette variable doit etre accessible par tout les agents, et qu'elle doit donc &ecirc;tre initialis&eacute; avant m&egrave;me le d&eacute;marrage.<br/>
			Pour ce qui est des autres lanceurs, il suffit d'&eacute;diter leurs scripts pour les lancer sur diff&eacute;rentes machines.<br/>
			Nous n'avons pas souhait&eacute; faire figurer des arguments &agrave; nos scripts dnas un soucis de simplicit&eacute;<br/>
			<br/>
			<br/>
		</p>
		<p>
			<h2>Exemple de lancement :</h2>
			Afin de tester ce lancement, lancer dans trois terminals distincts (mais en respectant l'ordre de lancement) les trois lignes de commandes suivantes :<br/>
			<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Terminal 1 :</u><br/>
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>./Annuaire_PagesJaunes.sh</i><br/>
			<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Terminal 2 :</u><br/>
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>./Magasin_Casino.sh</i><br/>
			<br/>
			&nbsp;&nbsp;&nbsp;&nbsp; - <u>Terminal 3 :</u><br/>
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>./Acheteur_Normal.sh</i><br/>
			<br/>
			<br/>
			Et voila.<br/>
			<br/>
			Bien sur, si vous le d&eacute;sirer, vous pouvez complexifier les choses en lancant en parall&egrave;le <u>plusieurs</u> magasins et acheteurs.<br/>
		</p>
	</body>
</html>
